home *** CD-ROM | disk | FTP | other *** search
/ PC World Komputer 2010 April / PCWorld0410.iso / pluginy Firefox / 59 / 59.xpi / chrome / useragentswitcher.jar / content / useragentswitcher / common / dom.js < prev    next >
Text File  |  2009-06-30  |  4KB  |  157 lines

  1. // User Agent Switcher DOM
  2. var UserAgentSwitcherDOM =
  3. {
  4.     // Returns all elements under a given node that match the given XPath
  5.     findElementsByXPath: function(node, xPath)
  6.     {
  7.     var namespaceResolver = null;
  8.     var namespaceURI      = UserAgentSwitcherDOM.getNamespaceURI(node);
  9.     var result            = null;
  10.     var resultList        = new Array();
  11.     var results           = null;
  12.     
  13.     // If the node has a namespace URI
  14.     if(namespaceURI)
  15.     {
  16.       namespaceResolver = new UserAgentSwitcherNamespaceResolver(namespaceURI);
  17.       xPath             = xPath.replace(/\/\//gi, "//useragentswitcher:");
  18.     }
  19.     
  20.     results = new XPathEvaluator().evaluate(xPath, node, namespaceResolver, XPathResult.ANY_TYPE, null);
  21.  
  22.     // Loop through the results
  23.     while((result = results.iterateNext()) != null)
  24.     {
  25.       resultList.push(result);
  26.     }
  27.  
  28.     return resultList;
  29.     },
  30.  
  31.     // Returns all the windows
  32.     getAllWindows: function()
  33.     {
  34.         var allWindows     = [];
  35.         var windowMediator = Components.classes["@mozilla.org/appshell/window-mediator;1"].getService(Components.interfaces.nsIWindowMediator);
  36.         
  37.         allWindows = allWindows.concat(UserAgentSwitcherArray.convertEnumerationToArray(windowMediator.getEnumerator("navigator:browser")));
  38.         allWindows = allWindows.concat(UserAgentSwitcherArray.convertEnumerationToArray(windowMediator.getEnumerator("Songbird:Main")));
  39.  
  40.         return allWindows;    
  41.     },
  42.  
  43.     // Returns the namespace URI for a node 
  44.     getNamespaceURI: function(node)
  45.     {
  46.         // If the node has an owner document
  47.         if(node.ownerDocument)
  48.         {
  49.             return node.ownerDocument.documentElement.namespaceURI;
  50.         }
  51.     
  52.         return node.documentElement.namespaceURI;
  53.     },
  54.     
  55.     // Returns the content document from a page load event
  56.     getPageLoadEventContentDocument: function(event)
  57.     {
  58.         // Try to get the event targets
  59.         try
  60.         {
  61.             var eventTarget    = event.target;
  62.             var originalTarget = event.originalTarget;
  63.         
  64.             // If the event targets are set and the original target is the document or the event target is the browser
  65.             if(eventTarget && originalTarget && (originalTarget.nodeName == "#document" || eventTarget == window.getBrowser()))
  66.             {
  67.                 var contentDocument = eventTarget.contentDocument;
  68.     
  69.                 // If the content document is not set and the original target default view parent is set
  70.                 if(!contentDocument && originalTarget.defaultView && originalTarget.defaultView.parent)
  71.                 {
  72.                     contentDocument = originalTarget.defaultView.parent.document;
  73.                 }
  74.     
  75.                 // If the content document is set and has the same URI as the original target
  76.                 if(contentDocument && contentDocument.documentURI == originalTarget.documentURI)
  77.                 {
  78.                     return contentDocument;
  79.                 }
  80.             }
  81.         }
  82.         catch(exception)
  83.         {
  84.             // Do nothing
  85.         }
  86.         
  87.         return null;
  88.     },
  89.  
  90.     // Inserts the given child after the element
  91.     insertAfter: function(child, after)
  92.     {
  93.         // If the child and after are set
  94.         if(child && after)
  95.         {
  96.             var nextSibling = after.nextSibling;
  97.             var parent      = after.parentNode;
  98.     
  99.             // If the element has a next sibling
  100.             if(nextSibling)
  101.             {
  102.                 parent.insertBefore(child, nextSibling);
  103.             }
  104.             else
  105.             {
  106.                 parent.appendChild(child);
  107.             }
  108.         }
  109.     },
  110.  
  111.     // Removes all child elements from an element
  112.     removeAllChildElements: function(element)
  113.     {
  114.         // If the element is set
  115.         if(element)
  116.         {
  117.             var childElements = element.childNodes;
  118.     
  119.             // Loop through the child elements
  120.             for(var i = 0; i < childElements.length; i++)
  121.             {
  122.                 element.removeChild(childElements[i]);
  123.             }
  124.     
  125.             childElements = element.childNodes;
  126.     
  127.             // Loop through the child elements
  128.             while(childElements.length > 0)
  129.             {
  130.                 element.removeChild(childElements[0]);
  131.             }
  132.         }
  133.     },
  134.  
  135.     // Removes an element
  136.     removeElement: function(element)
  137.     {
  138.         // If the element and it's parent node are set
  139.         if(element && element.parentNode)
  140.         {
  141.             element.parentNode.removeChild(element);
  142.         }
  143.     }
  144. };
  145.  
  146. // Constructs a namespace resolver object
  147. function UserAgentSwitcherNamespaceResolver(namespaceURI)
  148. {
  149.   this.namespaceURI = namespaceURI;
  150. }
  151.  
  152. // Looks up the namespace URI
  153. UserAgentSwitcherNamespaceResolver.prototype.lookupNamespaceURI = function(prefix)
  154. {
  155.   return this.namespaceURI;
  156. }
  157.